﻿-----------------
-- 表关系
-----------------

create database TikTok;
go
-- 使用TikTok数据库
use TikTok;
go


-----------------
-- 一对一
-----------------

-- 1. 身份认证信息和用户信息表是一对一

-- 创建用户信息表
create table UserInfo(
	UserId int primary key identity(1, 1),
	Nickname nvarchar(20) not null
);
-- 创建身份认证信息表
create table UserIDCardInfo(
	UserId int primary key,
	RealName nvarchar(10) not null,
	IDCardNumber nvarchar(20) not null
);
-- 身份认证信息表设置UserId外键到UserInfo表的UserId
alter table UserIDCardInfo add constraint FK_UserIDCardInfo_UserId foreign key (UserId) references UserInfo(UserId);

-- 用户信息表插入多条数据记录
insert into UserInfo (Nickname) values ('小绿茶');
insert into UserInfo (Nickname) values ('姗姗YOYO');
insert into UserInfo (Nickname) values ('七七情感聆听');
insert into UserInfo (Nickname) values ('追剧小朋友');
insert into UserInfo (Nickname) values ('桥天之娇子');
select * from UserInfo;

-- 身份认证信息表，插入多条记录
insert into UserIDCardInfo (UserId, RealName, IDCardNumber) values (1, '江美美', '110101199003072578');
select * from UserIDCardInfo;

-- 2. 钱包信息和用户信息一一对应

-- 创建钱包信息表
create table Wallet(
	UserId int primary key,
	Coin int not null default 0
);
-- 钱包信息表设置UserId外键到UserInfo表的UserId
alter table Wallet add constraint FK_Wallet_UserId foreign key (UserId) references UserInfo(UserId);
-- 钱包信息表插入数据
insert into Wallet (UserId, Coin) values (1, 100);
select * from Wallet;

-----------------
-- 一对多
-----------------

-- 1. 一个用户可以发多个视频，一个视频只能属于一个用户。

-- 创建短视频表 
create table Video(
	VideoId int primary key identity(1, 1),
	UserId int not null,
	VideoDesc nvarchar(255) not null,
	CoverPicUrl nvarchar(512) not null,
	VideoUrl nvarchar(512) not null
);
go
-- 插入短视频信息数据
insert into Video (UserId, VideoDesc, CoverPicUrl, VideoUrl) 
	values (1, '国宝好萌', 'https://mvimg10.meitudata.com/5efc2e4d292b4bgo29itdj2058.jpg!thumb480', 
	'https://mvvideo11.meitudata.com/5efc2e4b1f714j4jpv8o8t8888_H264_1_193afef3323948_H264_4_19a9e05b5e300b.mp4'),
	(2, '涨本事了啊', 'https://mvimg11.meitudata.com/5f150a2b66cf5149t7bf93868.jpg!thumb480', 
	'https://mvvideo11.meitudata.com/5f150a2b9eb8efwdro50kl2863_H264_4_1f0509d88b6dbf.mp4'),
	(1, '#汪星人#一边看电视一边撸狗', 'https://mvimg10.meitudata.com/5f291f1abdeabglzzgz4dl2100.jpg!thumb140', 
	'https://mvvideo11.meitudata.com/5f06925582bc81ftjm8bni3734_H264_4_1ba6be27ced62a.mp4');
go

select * from Video;

-- 2. 一个视频可以有多个评论，一个评论只能对应一个视频。

-- 创建评论表
create table Comment(
	CommentId int primary key identity(1, 1), -- 评论id
	UserId int not null, -- 发表评论的用户id
	Content nvarchar(255) not null, -- 评论内容
	VideoId int not null, -- 视频id
	CreateAt datetime -- 发表时间
);
go
-- 评论表设置UserId外键到UserInfo表的UserId
alter table Comment add constraint FK_Comment_UserId foreign key (UserId) references UserInfo(UserId);
-- 评论表设置VideoId外键到Video表的VideoId
alter table Comment add constraint FK_Comment_VideoId foreign key (VideoId) references Video(VideoId);
go

-- 对视频1进行评论，插入若干条数据记录
insert into Comment (UserId, Content, VideoId, CreateAt) values 
	(3, '牙口真好', 1, '2020-07-24 21:18:00')
	,(4, '这是假胡萝卜吧？', 1, '2020-07-27 20:14:00')
	,(5, '可爱的不要不要的🤗🤗🤗', 1, '2020-07-09 22:02:00');
go
-- 对视频2进行评论，插入若干条数据记录
insert into Comment (UserId, Content, VideoId, CreateAt) values 
	(3, '哈哈哈哈', 2, '2020-07-20 12:14:00')
	,(4, '2', 2, '2020-07-20 15:01:00');
go



-----------------
-- 多对多
-----------------


-- 1. 一个用户可以收到多个礼物，一个(种)礼物可以送给多个用户

-- 创建收礼表
create table GiftReceive(
	GiftReceiveId int primary key identity(1, 1), -- 自增id
	UserId int not null, -- 收礼的用户id
	GiftId int not null, -- 礼物id
	CreateAt datetime -- 收到礼物的时间
);
go
alter table GiftReceive add constraint FK_GiftReceive_UserId foreign key (UserId) references UserInfo(UserId);
alter table GiftReceive add constraint FK_GiftReceive_GiftId foreign key (GiftId) references Gift(GiftId);
go

-- 用户1收到的礼物
insert into GiftReceive (UserId, GiftId, CreateAt) values 
	(1, 1, '2020-07-28 19:00:55')
	,(1, 1, '2020-07-28 20:00:04')
	,(1, 2, '2020-07-28 20:01:36')
	,(1, 3, '2020-07-28 20:02:20');
-- 用户2收到的礼物
insert into GiftReceive (UserId, GiftId, CreateAt) values 
	(2, 1, '2020-07-29 19:01:55')
	,(2, 2, '2020-07-29 20:08:04')
	,(2, 2, '2020-07-29 20:18:36')
	,(2, 3, '2020-07-29 20:28:20');
go

-- 2. 用户互相关注
